package com.webserver.core;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/**
 * @author liyang
 * @version 1.0
 * @package com.webserver.core
 * @file ClientHandler.java
 * @description
 * @time 2024-04-30 15:14
 */

/*线程不再需要共享数据，也就不再需要定义为内部类了
* 这是一个线程任务➡实现接口*/
public class ClientHandler implements Runnable{
    private Socket socket;
    public ClientHandler(Socket socket){
        this.socket = socket;
    }

    @Override
    public void run(){
        try {
            //1解析请求
            //1.1:读取请求行
            //测试读取一行字符串的操作
            InputStream in = socket.getInputStream();
            StringBuilder builder = new StringBuilder();//保存拼接的一行内容
            char cur='a',pre='a';//cur记录本次读取的字符，pre记录上次读取的字符
            int d;//每次读取的字节
            while((d = in.read())!=-1){
                cur = (char)d;//将本次读取到的字节转换为char记录在cur上。
                if(pre==13 && cur==10){//如果上次读取的为回车符，本次读取的是换行符
                    break;//停止读取(一行结束了)
                }
                builder.append(cur);//将本次读取的字符拼接到已经读取的字符串中
                pre = cur;//在下次读取前将本次读取的字符记作"上次读取的字符"
            }
            //trim:去掉行尾的不可见的回车符
            String line = builder.toString().trim();
            System.out.println("请求行:"+line);
            //将请求行内容按照空格拆分为三部分，并赋值给下面三个变量
            String[]data = line.split("\\s");
            String method = data[0];//请求方式
            String uri = data[1];//抽象路径
            String protocol = data[2];//协议版本
            System.out.println("method:"+method);
            System.out.println("uri:"+uri);
            System.out.println("protocol:"+protocol);


            //2处理请求


            //3发送响应


        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //一问一答后断开TCP连接
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}